home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / languages / cleo.lzh / Cleo / include / CLEOBIS.H next >
Encoding:
C/C++ Source or Header  |  1993-01-24  |  11.7 KB  |  370 lines

  1. /***************************************************************************
  2. *   Ce fichier, ainsi que tous les  modules  l'accompagnant, peut et  doit *
  3. * etre  copié GRATUITEMENT à la seule condition expresse de conserver      *
  4. * l'INTEGRALITE  du  Code Source, de  la documentation, et  des fichiers   *
  5. * annexes du package. Ce logiciel est Shareware, veuilez envoyer 100 FF à  *
  6. * l'auteur pour recevoir regulièrement les nouvelles versions.             *
  7. * Toute modification est INTERDITE sans l'autorisation écrite de l'auteur. *
  8. *            Tous droits réservés à M. DIALLO Barrou, Juillet 1992.        *
  9. ***************************************************************************/
  10.  
  11.  
  12. #define VERSION 1        /* Version actuelle de Cleobis    */
  13. #define SUBVERSION 0
  14. #define NAME "cleo"             /* Nom de la Version */
  15. #ifdef msdos
  16.         #define DEFAULT_OUT "cleobin\\cleobis.out"   /* Nom du file dest par defaut */
  17.         #define CONFIGFILE "etc\\cleo_int.cfg"
  18. #else
  19.         #define DEFAULT_OUT "cleobin/cleo.out"   /* Nom du file dest par defaut */
  20.         #define CONFIGFILE "etc/cleo_int.cfg"
  21. #endif
  22.  
  23. #ifdef unix
  24.     #define stricmp Stricmp
  25. #endif
  26.  
  27. #define MAXSTRING 256           /* Taille maximum d'une chaine Cleobis */
  28.  
  29. #define SECTDATA "Data Section"
  30. #define SECTCODE "Code Section"
  31. #define SECTLIB "Lib Section"
  32.  
  33. /* Variables de compilation */
  34.  
  35. #define RUNNING 0
  36. #define TRACING 1
  37.  
  38. /*  Redefinition de types */
  39.  
  40. #define UC unsigned char
  41. #define UL unsigned long
  42.  
  43. typedef struct {
  44.             char *msg;
  45.             int num;
  46.             } Erreur;
  47.  
  48.         /************** Type 'Programme Genere' ***************/
  49. typedef struct prog {
  50.                         int code;        /*** code l'instruction ***/
  51.                         int operande;    /*** Operande ***/
  52.                         struct prog *next;
  53.                         } PROG;
  54.  
  55.         /************** Type Constante Courante ***************/
  56.  
  57. typedef union {
  58.                 char string[MAXSTRING]; /* Compatibilite sizeof > !!! */
  59.                 double real;
  60.                 long integer;
  61.                 char boolean;
  62.                 char Char;
  63.                                /* Manque Array */
  64.                 } MY_CONST;
  65.  
  66.     typedef struct {
  67.                 int id;
  68.                 char *str;
  69.         } FIELDSTRUCT;
  70.  
  71.      /************** Type des variables Courantes **************/
  72.  
  73. typedef struct Var {
  74.                 int type;               /** enum type de la var **/
  75.                 int num;                /** numero de la variable */
  76.                 int fct;                /** numero de la fct */
  77.                 struct
  78.                  {
  79.                     int borne1, borne2; /* Ensemble de Def */
  80.                     int type;           /* Type du tableau */
  81.                  } tab;                 /** data pour Var Tableau **/
  82.                 char str[MAXSTRING];
  83.                 struct Var *prev;
  84.                 struct Var *next;
  85.                 } VAR;
  86.  
  87.             /******* Types Standard Pascal ******/
  88.  
  89. typedef enum { separ_mt=0, ident_mt , constint_mt, conststr_mt, constreal_mt,
  90.                 constchr_mt, math_mt, reserved_mt, reservedtype_mt,
  91.                 fonction_mt, booleen_mt, mathope_mt, boolean_mt,
  92.                 extern_mt
  93.              } MY_TYPESID;
  94.  
  95. typedef enum { program_f =100 , if_f, then_f, else_f, while_f, do_f,
  96.                for_f, repeat_f, until_f, begin_f, end_f, var_f, pp_f,
  97.                to_f, downto_f, of_f, function_f, procedure_f, goto_f,
  98.                fin_f,
  99.  
  100.                read_fio, readln_fio, write_fio, writeln_fio, /*fwrite_fio, fread_fio, */
  101.                inclib_fio,
  102.                fin_fio,
  103.  
  104.                abs_m , atan_m, acos_m, asin_m, cosh_m, sinh_m,
  105.                cos_m, sin_m, exp_m, frac_m, int_m, ln_m, sqr_m,
  106.                sqrt_m,
  107.                odd_m, even_m, pred_m, succ_m, inv_m, rnd_m, tan_m, tanh_m,
  108.                fin_m,
  109.  
  110.                integer_t=200 , real_t, string_t, char_t, const_t,
  111.                boolean_t, array_t, longint_t, longreal_t,
  112.                point2d_t, point3d_t, rgb_t,           /* file_t, */
  113.                fin_t
  114.              } FCTID;
  115.  
  116. /************** Type Operateur MATH *********/
  117.  
  118. typedef enum { plus_o =300, moins_o, fois_o, divise_o, mod_o, div_o,
  119.                fin_o
  120.              } MATHOPE;
  121.  
  122. /************** Type Operateur BOOLEEN *********/
  123.  
  124. typedef enum { pluspetit_b =320, plusgrand_b,
  125.                pluspetitegal_b, plusgrandegal_b,
  126.                egal_b, different_b,
  127.  
  128.                et_b, ou_b, ouex_b, non_b, in_b,
  129.                affecte_b,
  130.                fin_b
  131.              } BOOLOPE;
  132.  
  133. /************** Type Symbol *****************************/
  134.  
  135. typedef struct tableconst {
  136.              FCTID type;                /* type de la constante   */
  137.              MY_CONST  variable;        /* Valeur de la constante */
  138.              int num;                   /* Numero de la constante */
  139.              struct tableconst *next;    /* Prochaine Constante    */
  140.              } CONST;
  141.  
  142. /********************* Type MOT *******************/
  143.  
  144. typedef struct {
  145.                 char *str;            /*** Nom de la fonction ***/
  146.                 FCTID id;             /*** Id de la fct ***/
  147.                } MOT;
  148.  
  149. /*********** declaration du type Infini **********/
  150.  
  151. typedef struct {
  152.     void * ele;         /* element de la suite */
  153.     long len;           /* Longueur de la suite */
  154.     }   Suite;      /* Suite Infinie */
  155.  
  156.  
  157. /*********** Structures Operateurs ***********/
  158.  
  159. typedef struct {
  160.                 char *str;      /* chr de l'operateur Math. */
  161.                 MATHOPE id;
  162.                 } OPE;
  163.  
  164. typedef struct {
  165.                 char *str;      /* chr de l'operateur Booleen */
  166.                 BOOLOPE id;
  167.                 } BOOLEEN;
  168.  
  169. typedef struct {
  170.                 char *str;
  171.                 int id;
  172.                 char *type;     /* Tableau de types */
  173.                } FCTN;          /* Fonction à n arguments */
  174.  
  175.  
  176. /************** Code des Mnémoniques ******************/
  177.  
  178. typedef enum {
  179.  RTS=2000,
  180.  PADR_CHR,  /* Push Adr N; ajoute l'adr de la variable N sur la pile */
  181.  PADR_INT,
  182.  PADR_LINT,
  183.  PADR_REAL,
  184.  PADR_LREAL,
  185.  PADR_STR,
  186.  PADR_BOOL,
  187.  PADR_ARRAY,
  188.  
  189.  PVAL_CHR    ,   /* Push Val N; Met la val de la Const Chr N dans la pile   */
  190.  PVAL_INT    ,   /* Push Val N; Met la val de la Const Int N dans la pile   */
  191.  PVAL_REAL    ,  /* Push Val N; Met la val de la Const Real N dans la pile   */
  192.  PVAL_STR    ,   /* Push Val N; Met l'ADRESSE de la Const String N dans la pile   */
  193.  
  194.  PMEM_CHR    ,   /* Push Memory; charge la valeur de la var
  195.                                                   dont l'adr est au sommet de la pile  */
  196.  PMEM_INT,
  197.  PMEM_LINT,
  198.  PMEM_REAL,
  199.  PMEM_LREAL,
  200.  PMEM_STR,
  201.  PMEM_BOOL,
  202.  PMEM_ARRAY,        /* 15 */
  203.  
  204.  STM_CHR,      /* Pop valeur dans la variable dont l'adr est
  205.                                                 a l'avant derniere pos de la pile */
  206.  STM_INT,
  207.  STM_LINT,
  208.  STM_REAL,
  209.  STM_LREAL,
  210.  STM_STR,
  211.  STM_BOOL,
  212.  STM_ARRAY,
  213.  
  214.  DIVS  ,     /************ Operations sur les Valeurs du ********/
  215.  MULS ,      /*            sommet de la pile                    */
  216.  ADD  ,      /*              /, *, +, -, *-1                    */
  217.  SUB  ,      /*                                                 */
  218.  NEG  ,      /***************************************************/
  219.  
  220.  EQU  ,          /* =    */
  221.  LT  ,           /* <    */
  222.  GT  ,           /* >    */
  223.  LE  ,           /* <=   */
  224.  GE  ,           /* >=   */
  225.  NE,             /* <>   */
  226.  AND,
  227.  OR,
  228.  XOR,
  229.  NOT,
  230.  IN,                 /* 37*/
  231.  
  232.  EQU_STR  ,         /* =    */
  233.  LT_STR  ,          /* <    */
  234.  GT_STR  ,          /* >    */
  235.  LE_STR  ,          /* <=   */
  236.  GE_STR  ,          /* >=   */
  237.  
  238.  ORG,              /*  Adresse courante */
  239.  BNE ,      /* N, va à l'adr N si Condition en Fin de pile = 0 =FAUX */
  240.  BRA ,      /* N, Saut sans condition a l'adr N */
  241.  
  242.  PRSTR   ,    /* Affiche la const chaine dont l'adr est au sommet de la pile */
  243.  PRVSTR   ,    /* Affiche la var chaine ... */
  244.  PRCHR,
  245.  PRINT  ,     /*            l'Entier  ou le Real...*/
  246.  PRINTCHR,
  247.  CHR13  ,     /* Passe a la ligne */
  248.  READ,   /* 50 */
  249.  
  250.  ABS, ATAN, ACOS, ASIN, COSH, SINH, COS, SIN, EXP, FRAC, INT, LN, SQR, SQRT,
  251. LOADORG,
  252.  
  253. PADR_P2D, PMEM_P2D, STM_P2D,
  254. PADR_P3D, PMEM_P3D, STM_P3D,
  255. PUSHVAL,                            /* Met une valeur sur la pile */
  256. PMEM_P2D_ALL, PMEM_P3D_ALL,         /* empile tous les champs */
  257.  
  258. ODD, EVEN, PRED, SUCC, INV, RND, TANH, TAN,
  259. PADR_RGB, PMEM_RGB, STM_RGB, PMEM_RGB_ALL,
  260. MOD, DIV,    /* Modulo et division entiere */
  261. LIBRARY
  262.     } MNEMOS;
  263.  
  264. /********** Entete et fichier P-Code **************/
  265.  
  266. typedef struct {
  267.         char magic[30];         /* Chr de reconnaissance */
  268.         long codesize;          /* Taille du Code */
  269.         int nbrefctlib;         /* Nbre de fct library */
  270.  
  271.         int string;             /* Nbre de constantes Chaines */
  272.         int integer;            /* Nbre de constantes Entier */
  273.         int real;               /* Nbre de constantes real */
  274.         int Char;               /* Nbre de constantes Char */
  275.  
  276.         int Vstring;             /* Nbre de Variables Chaines */
  277.         int Varray;              /* Nbre de Variables Array */
  278.         int Vinteger;            /* Nbre de Variables Entier */
  279.         int Vlongint;            /* Nbre de Variables Entier long*/
  280.         int Vreal;               /* Nbre de Variables real */
  281.         int Vlongreal;           /* Nbre de Variables longreal */
  282.         int Vchar;               /* Nbre de Variables Char */
  283.         int Vboolean;            /* Nbre de Variables booleen */
  284. /*        int Vfile;    */           /* Nbre de Variables File */
  285.  
  286.         int Vpoint3d;            /* Nbre de Variables point3d */
  287.         int Vpoint2d;            /* Nbre de Variables point2d */
  288.         int Vrgb;                /* Nbre de Variables rgb */
  289.         int Vsuite;              /* Nbre de Variables Suite */
  290.  
  291.                   } Entete;
  292.  
  293. /***************** Classe d'erreur *******************/
  294.  
  295. #define FATALERROR  0
  296. #define TEXTERROR   1
  297. #define WARNING     2
  298. #define RECERROR    3
  299.  
  300.                  /********* WARNINGS ***********/
  301.  
  302. #define NOCONF      0       /* Warning pas de fichier config compil */
  303. #define LESSARGS    1
  304.  
  305.     /***************** Numeros d'erreur *******************/
  306.  
  307. typedef enum {
  308.  ERRCONF=0   ,   /* Err fichier de config */
  309.  CONF        ,   /* Err de syntaxe dans le fichier config compil. */
  310.  SYNTAX      ,   /* Err de syntaxe */
  311.  BADTYPE     ,   /* Mauvais type d'argument */
  312.  UNKWOWNCONF ,   /* Variable de config inconnue */
  313.  MODECONF    ,   /* Mode d'exec inconnu */
  314.  BADARGS     ,   /* Mauvais arguments */
  315.  ERRCODE     ,   /* Fichier code inexistant */
  316.  FICTXT      ,   /*          Txt         */
  317.  MEMCODE     ,       /* Pas de place pour le code */
  318.  MEMTXT      ,      /* idem txt */
  319.  MEMSYM      ,      /* idem table des symbols */
  320.  GUILLE      ,      /* Quote */
  321.  BADCONST    ,      /* ex: 2.3343.1   */
  322.  BADEND      ,      /* ex : commentaire non fermée avant la fin du Source */
  323.  MEMCOMPIL   ,      /* Pas assez de memoire pour la compil */
  324.  STRING2LONG ,      /* Const String >= MAXSTRING */
  325.  DOUBLESYMB  ,      /* Variable déclarée 2 fois */
  326.  NOPOINT     ,
  327.  NOVIRG      ,
  328.  NOPRG       ,
  329.  NOIDENT     ,
  330.  NOAFFECTE   ,
  331.  NOBEGIN     ,
  332.  NOEND       ,
  333.  NOPO        ,
  334.  NOPF        ,
  335.  NOPP        ,
  336.  NOTYPE      ,
  337.  NOADRSPC    ,
  338.  UNKNOWNVAR  ,
  339.  NODO        ,
  340.  NOBOOL      ,
  341.  NOTHEN      ,
  342.  NOUNTIL     ,
  343.  BADPROC     ,
  344.  NOBRAKETO   ,
  345.  NOBRAKETF   ,
  346.  NOCONST     ,
  347.  SEPPP       ,
  348.  NOOF        ,
  349.  NOFIELD     ,
  350.  UNFIELD,
  351.  NOPPQ,
  352.  NOPGQ,
  353.  CANTOPENLIB,
  354.  NBPARA
  355. } ERRNUM;
  356.  
  357. #define Isspace(x)  ( ((x)==' ' || (x)=='\t')?1:0)
  358. #define isnum(x)    ( (((x)>='0') && ((x) <='9'))?1:0 )
  359. #define alnum(x)    ( (isnum(x) || (((x) >='a') && ((x)<='z')) || (((x) >='A') && ((x)<='Z')))? 1:0 )
  360.  
  361. #ifndef unix
  362.     #define cfree free
  363. #endif
  364.  
  365. #ifdef msdos
  366.         #include "include\\internes.h"       /* Fct internes */
  367. #else
  368.         #include "include/internes.h"
  369. #endif
  370.